package fr.upstlse.glre.server.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

import fr.upstlse.glre.business.domain.communiquer.MessageEtat;
import fr.upstlse.glre.business.domain.user.UserRole;
import fr.upstlse.glre.business.vo.ActualiteSearchCriteriaVO;
import fr.upstlse.glre.business.vo.ActualiteVO;
import fr.upstlse.glre.business.vo.EntrepriseVO;
import fr.upstlse.glre.business.vo.StageVO;
import fr.upstlse.glre.business.vo.communiquer.BoiteAuxLettresVO;
import fr.upstlse.glre.business.vo.communiquer.MessageVO;
import fr.upstlse.glre.business.vo.depot.DocumentVO;
import fr.upstlse.glre.business.vo.depot.LibelleVO;
import fr.upstlse.glre.business.vo.user.AdresseVO;
import fr.upstlse.glre.business.vo.user.EtudiantSearchCriteriaVO;
import fr.upstlse.glre.business.vo.user.EtudiantVO;
import fr.upstlse.glre.business.vo.user.ProfesseurVO;
import fr.upstlse.glre.business.vo.user.UserSearchCriteriaVO;
import fr.upstlse.glre.business.vo.user.UserVO;
import fr.upstlse.glre.business.vo.vitrine.PageVitrineVO;
import fr.upstlse.glre.client.vo.actualite.ActualiteSearchCriteriaVOGWT;
import fr.upstlse.glre.client.vo.actualite.ActualiteVOGWT;
import fr.upstlse.glre.client.vo.communiquer.BoiteAuxLettresVOGWT;
import fr.upstlse.glre.client.vo.communiquer.MessageEtatGWT;
import fr.upstlse.glre.client.vo.communiquer.MessageVOGWT;
import fr.upstlse.glre.client.vo.depot.DocumentVOGWT;
import fr.upstlse.glre.client.vo.depot.LibelleVOGWT;
import fr.upstlse.glre.client.vo.user.AdresseVOGWT;
import fr.upstlse.glre.client.vo.user.EntrepriseVOGWT;
import fr.upstlse.glre.client.vo.user.EtudiantSearchCriteriaVOGWT;
import fr.upstlse.glre.client.vo.user.EtudiantVOGWT;
import fr.upstlse.glre.client.vo.user.ProfesseurVOGWT;
import fr.upstlse.glre.client.vo.user.StageVOGWT;
import fr.upstlse.glre.client.vo.user.UserRoleVOGWT;
import fr.upstlse.glre.client.vo.user.UserSearchCriteriaVOGWT;
import fr.upstlse.glre.client.vo.user.UserVOGWT;
import fr.upstlse.glre.client.vo.vitrine.PageVitrineVOGWT;

public class VOUtil {
	public static UserVOGWT userVOToUserVOGWT(UserVO pUserVO) {
		UserVOGWT lUser = new UserVOGWT();
		lUser.setId(pUserVO.getId());
		lUser.setLogin(pUserVO.getLogin());
		lUser.setPassword(pUserVO.getPassword());
		lUser.setRole(pUserVO.getRole().getValue());

		return lUser;
	}

	public static UserVO userVOGWTToUserVO(UserVOGWT pUserVOGWT) {
		UserVO lUser = new UserVO();
		lUser.setId(pUserVOGWT.getId());
		if(pUserVOGWT.getLogin() != null) {
			lUser.setLogin(pUserVOGWT.getLogin());	
		}
		if(pUserVOGWT.getPassword() != null) {
			lUser.setPassword(pUserVOGWT.getPassword());			
		}
		if(pUserVOGWT.getRole() != null) {
			lUser.setRole(UserRole.fromString(pUserVOGWT.getRole()));
		}
		return lUser;
	}

	public static EtudiantVOGWT etudiantVOToEtudiantVOGWT(EtudiantVO pEtudiantVO) {

		EtudiantVOGWT lEtudiant = new EtudiantVOGWT();
		lEtudiant.setNom(pEtudiantVO.getNom());
		lEtudiant.setPrenom(pEtudiantVO.getPrenom());
		lEtudiant.setEmail(pEtudiantVO.getEmail());
		lEtudiant.setTelephonefixe(pEtudiantVO.getTelephonefixe());
		lEtudiant.setTelephoneportable(pEtudiantVO.getTelephoneportable());
		AdresseVOGWT lAdresse = adresseVOToAdresseVOGWT(pEtudiantVO
				.getAdresseVO());
		lEtudiant.setAdresse(lAdresse);

		lEtudiant.setId(pEtudiantVO.getId());
		lEtudiant.setLogin(pEtudiantVO.getLogin());
		lEtudiant.setPassword(pEtudiantVO.getPassword());
		lEtudiant.setRole(pEtudiantVO.getRole().getValue());

		if (pEtudiantVO.getStageVO() != null) {
			StageVOGWT lStage = stageVOToStageVOGWT(pEtudiantVO.getStageVO());
			lEtudiant.setStage(lStage);
		}
		return lEtudiant;
	}

	public static EtudiantVO etudiantVOGWTToEtudiantVO(
			EtudiantVOGWT pEtudiantVOGWT) {

		AdresseVO lAdresse = new AdresseVO();
		lAdresse.setId(pEtudiantVOGWT.getAdresse().getId());
		lAdresse.setVoie(pEtudiantVOGWT.getAdresse().getVoie());
		lAdresse.setCodepostal(pEtudiantVOGWT.getAdresse().getCodepostal());
		lAdresse.setVille(pEtudiantVOGWT.getAdresse().getVille());
		lAdresse.setPays(pEtudiantVOGWT.getAdresse().getPays());

		EtudiantVO lEtudiant = new EtudiantVO();
		lEtudiant.setNom(pEtudiantVOGWT.getNom());
		lEtudiant.setPrenom(pEtudiantVOGWT.getPrenom());
		lEtudiant.setEmail(pEtudiantVOGWT.getEmail());
		lEtudiant.setTelephonefixe(pEtudiantVOGWT.getTelephonefixe());
		lEtudiant.setTelephoneportable(pEtudiantVOGWT.getTelephoneportable());
		lEtudiant.setAdresseVO(lAdresse);
		lEtudiant.setId(pEtudiantVOGWT.getId());
		lEtudiant.setLogin(pEtudiantVOGWT.getLogin());
		lEtudiant.setPassword(pEtudiantVOGWT.getPassword());
		lEtudiant.setRole(UserRole.fromString(pEtudiantVOGWT.getRole()));

		if (pEtudiantVOGWT.getStage() != null) {
			StageVO lStage = stageVOGWTToStageVO(pEtudiantVOGWT.getStage());
			lEtudiant.setStageVO(lStage);
		}

		return lEtudiant;

	}

	public static StageVO stageVOGWTToStageVO(StageVOGWT pStageVOGWT) {
		StageVO lStage = new StageVO();
		lStage.setId(pStageVOGWT.getId());
		lStage.setIntitule(pStageVOGWT.getIntitule());
		lStage.setDescription(pStageVOGWT.getDescription());

		EntrepriseVO lEntreprise = entrepriseVOGWTToEntrepriseVO(pStageVOGWT
				.getEntreprise());
		lStage.setEntrepriseVO(lEntreprise);

		ProfesseurVO lTuteur = professeurVOGWTToProfesseurVO(pStageVOGWT
				.getTuteur());
		lStage.setProfesseurVO(lTuteur);
		return lStage;
	}

	public static StageVOGWT stageVOToStageVOGWT(StageVO pStageVO) {
		StageVOGWT lStage = new StageVOGWT();
		lStage.setId(pStageVO.getId());
		lStage.setIntitule(pStageVO.getIntitule());
		lStage.setDescription(pStageVO.getDescription());

		EntrepriseVOGWT lEntreprise = entrepriseVOToEntrepriseVOGWT(pStageVO
				.getEntrepriseVO());
		lStage.setEntreprise(lEntreprise);

		ProfesseurVOGWT lTuteur = professeurVOToProfesseurVOGWT(pStageVO
				.getProfesseurVO());
		lStage.setTuteur(lTuteur);
		return lStage;
	}

	public static EntrepriseVO entrepriseVOGWTToEntrepriseVO(
			EntrepriseVOGWT pEntrepriseVOGWT) {
		EntrepriseVO lEntreprise = new EntrepriseVO();
		lEntreprise.setId(pEntrepriseVOGWT.getId());
		lEntreprise.setNom(pEntrepriseVOGWT.getNom());
		lEntreprise.setMaitredestage(pEntrepriseVOGWT.getMaitredestage());
		lEntreprise.setMaitredestageemail(pEntrepriseVOGWT
				.getMaitredestageemail());
		AdresseVO lEntrepriseAdresse = adresseVOGWTToAdresseVO(pEntrepriseVOGWT
				.getAdresse());
		lEntreprise.setAdresseVO(lEntrepriseAdresse);
		return lEntreprise;
	}

	public static EntrepriseVOGWT entrepriseVOToEntrepriseVOGWT(
			EntrepriseVO pEntrepriseVO) {
		EntrepriseVOGWT lEntreprise = new EntrepriseVOGWT();
		lEntreprise.setId(pEntrepriseVO.getId());
		lEntreprise.setNom(pEntrepriseVO.getNom());
		lEntreprise.setMaitredestage(pEntrepriseVO.getMaitredestage());
		lEntreprise
				.setMaitredestageemail(pEntrepriseVO.getMaitredestageemail());
		AdresseVOGWT lEntrepriseAdresse = adresseVOToAdresseVOGWT(pEntrepriseVO
				.getAdresseVO());
		lEntreprise.setAdresse(lEntrepriseAdresse);
		return lEntreprise;
	}

	public static AdresseVO adresseVOGWTToAdresseVO(AdresseVOGWT pAdresseVOGWT) {
		AdresseVO lAdresse = new AdresseVO();
		lAdresse.setId(pAdresseVOGWT.getId());
		lAdresse.setVoie(pAdresseVOGWT.getVoie());
		lAdresse.setCodepostal(pAdresseVOGWT.getCodepostal());
		lAdresse.setVille(pAdresseVOGWT.getVille());
		lAdresse.setPays(pAdresseVOGWT.getPays());
		return lAdresse;
	}

	public static AdresseVOGWT adresseVOToAdresseVOGWT(AdresseVO pAdresseVO) {
		AdresseVOGWT lAdresse = new AdresseVOGWT();
		lAdresse.setId(pAdresseVO.getId());
		lAdresse.setVoie(pAdresseVO.getVoie());
		lAdresse.setCodepostal(pAdresseVO.getCodepostal());
		lAdresse.setVille(pAdresseVO.getVille());
		lAdresse.setPays(pAdresseVO.getPays());
		return lAdresse;
	}

	public static ProfesseurVO professeurVOGWTToProfesseurVO(
			ProfesseurVOGWT pProfesseurVOGWT) {
		ProfesseurVO lProfesseur = new ProfesseurVO();
		lProfesseur.setNom(pProfesseurVOGWT.getNom());
		lProfesseur.setPrenom(pProfesseurVOGWT.getPrenom());
		lProfesseur.setEmail(pProfesseurVOGWT.getEmail());
		lProfesseur.setEnseignement(pProfesseurVOGWT.getEnseignement());
		lProfesseur.setId(pProfesseurVOGWT.getId());
		lProfesseur.setLogin(pProfesseurVOGWT.getLogin());
		lProfesseur.setPassword(pProfesseurVOGWT.getPassword());
		lProfesseur.setRole(UserRole.fromString(pProfesseurVOGWT.getRole()));

		return lProfesseur;
	}

	public static ProfesseurVOGWT professeurVOToProfesseurVOGWT(
			ProfesseurVO pProfesseurVO) {
		ProfesseurVOGWT lProfesseur = new ProfesseurVOGWT();
		lProfesseur.setNom(pProfesseurVO.getNom());
		lProfesseur.setPrenom(pProfesseurVO.getPrenom());
		lProfesseur.setEmail(pProfesseurVO.getEmail());
		lProfesseur.setEnseignement(pProfesseurVO.getEnseignement());
		lProfesseur.setId(pProfesseurVO.getId());
		lProfesseur.setLogin(pProfesseurVO.getLogin());
		lProfesseur.setPassword(pProfesseurVO.getPassword());
		lProfesseur.setRole(pProfesseurVO.getRole().getValue());

		return lProfesseur;
	}

	public static DocumentVO documentVOGWTTODocumentVO(
			DocumentVOGWT pDocumentVOGWT) {
		DocumentVO lDocumentVO = new DocumentVO();
		lDocumentVO.setId(pDocumentVOGWT.getId());
		lDocumentVO.setIntitule(pDocumentVOGWT.getIntitule());
		lDocumentVO.setDescription(pDocumentVOGWT.getDescription());
		lDocumentVO.setContenu(pDocumentVOGWT.getContenu());
		lDocumentVO.setTaille(pDocumentVOGWT.getTaille());
		lDocumentVO.setLibelleVO(libelleVOGWTToLibelleVO(pDocumentVOGWT
				.getLibelle()));

		return lDocumentVO;
	}

	public static DocumentVOGWT documentVOTODocumentVOGWT(DocumentVO pDocumentVO) {
		DocumentVOGWT lDocumentVOGWT = new DocumentVOGWT();
		lDocumentVOGWT.setId(pDocumentVO.getId());
		lDocumentVOGWT.setIntitule(pDocumentVO.getIntitule());
		lDocumentVOGWT.setDescription(pDocumentVO.getDescription());
		lDocumentVOGWT.setContenu(pDocumentVO.getContenu());
		lDocumentVOGWT.setTaille(pDocumentVO.getTaille());
		lDocumentVOGWT.setLibelle(libelleVOToLibelleVOGWT(pDocumentVO
				.getLibelleVO()));

		return lDocumentVOGWT;
	}

	public static LibelleVO libelleVOGWTToLibelleVO(LibelleVOGWT pLibelleVOGWT) {
		LibelleVO lLibelleVO = new LibelleVO();
		lLibelleVO.setId(pLibelleVOGWT.getId());
		lLibelleVO.setIntitule(pLibelleVOGWT.getIntitule());

		return lLibelleVO;
	}

	public static LibelleVOGWT libelleVOToLibelleVOGWT(LibelleVO pLibelleVO) {
		LibelleVOGWT lLibelleVOGWT = new LibelleVOGWT();
		lLibelleVOGWT.setId(pLibelleVO.getId());
		lLibelleVOGWT.setIntitule(pLibelleVO.getIntitule());

		return lLibelleVOGWT;
	}

	public static PageVitrineVOGWT pageVitrineVOToPageVitrineVOGWT(
			PageVitrineVO pageVitrineVO) {
		PageVitrineVOGWT lPageVitrineVOGWT = new PageVitrineVOGWT();
		lPageVitrineVOGWT.setContenu(pageVitrineVO.getContenu());
		lPageVitrineVOGWT.setId(pageVitrineVO.getId());
		lPageVitrineVOGWT.setTitre(pageVitrineVO.getTitre());
		return lPageVitrineVOGWT;
	}

	public static PageVitrineVO pageVitrineVOGWTToPageVitrineVO(
			PageVitrineVOGWT pageVitrineVOGWT) {
		PageVitrineVO lPageVitrineVO = new PageVitrineVO();
		lPageVitrineVO.setContenu(pageVitrineVOGWT.getContenu());
		lPageVitrineVO.setId(pageVitrineVOGWT.getId());
		lPageVitrineVO.setTitre(pageVitrineVOGWT.getTitre());
		return lPageVitrineVO;
	}

	public static UserRoleVOGWT userRoleToUserRoleVOGWT(UserRole pUserRole) {
		UserRoleVOGWT lUserRoleVOGWT = UserRoleVOGWT.getUserRoleVOGWTs().get(
				pUserRole.getValue());
		return lUserRoleVOGWT;
	}

	public static UserRole userRoleVOGWTToUserRole(UserRoleVOGWT pUserRoleVOGWT) {
		UserRole lUserRole = UserRole.fromString(pUserRoleVOGWT.getValue());
		return lUserRole;
	}

	public static UserSearchCriteriaVOGWT userSearchCriteriaVOToUserSearchCriteriaVOGWT(
			UserSearchCriteriaVO pUserSearchCriteriaVO) {
		UserSearchCriteriaVOGWT lUserSearchCriteriaVOGWT = new UserSearchCriteriaVOGWT();
		lUserSearchCriteriaVOGWT.setLogin(pUserSearchCriteriaVO.getLogin());
		lUserSearchCriteriaVOGWT.setPassword(pUserSearchCriteriaVO
				.getPassword());
		lUserSearchCriteriaVOGWT.setRole(VOUtil
				.userRoleToUserRoleVOGWT(pUserSearchCriteriaVO.getRole()));
		return lUserSearchCriteriaVOGWT;
	}

	public static UserSearchCriteriaVO userSearchCriteriaVOGWTToUserSearchCriteriaVO(
			UserSearchCriteriaVOGWT pUserSearchCriteriaVOGWT) {
		UserSearchCriteriaVO lUserSearchCriteriaVO = new UserSearchCriteriaVO();

		if (pUserSearchCriteriaVOGWT.getLogin() != null) {
			lUserSearchCriteriaVO.setLogin(pUserSearchCriteriaVOGWT.getLogin());
		}

		if (pUserSearchCriteriaVOGWT.getPassword() != null) {
			lUserSearchCriteriaVO.setPassword(pUserSearchCriteriaVOGWT
					.getPassword());
		}

		if (pUserSearchCriteriaVOGWT.getRole() != null) {
			lUserSearchCriteriaVO
					.setRole(VOUtil
							.userRoleVOGWTToUserRole(pUserSearchCriteriaVOGWT
									.getRole()));
		}
		return lUserSearchCriteriaVO;
	}

	public static EtudiantSearchCriteriaVOGWT etudiantSearchCriteriaVOToEtudiantSearchCriteriaVOGWT(
			EtudiantSearchCriteriaVO pEtudiantSearchCriteriaVO) {
		EtudiantSearchCriteriaVOGWT lEtudiantSearchCriteriaVOGWT = new EtudiantSearchCriteriaVOGWT();
		lEtudiantSearchCriteriaVOGWT.setLogin(pEtudiantSearchCriteriaVO
				.getLogin());
		lEtudiantSearchCriteriaVOGWT.setPassword(pEtudiantSearchCriteriaVO
				.getPassword());
		lEtudiantSearchCriteriaVOGWT.setRole(VOUtil
				.userRoleToUserRoleVOGWT(pEtudiantSearchCriteriaVO.getRole()));
		lEtudiantSearchCriteriaVOGWT.setNom(pEtudiantSearchCriteriaVO.getNom());
		lEtudiantSearchCriteriaVOGWT.setPrenom(pEtudiantSearchCriteriaVO
				.getPrenom());
		lEtudiantSearchCriteriaVOGWT.setEmail(pEtudiantSearchCriteriaVO
				.getEmail());
		return lEtudiantSearchCriteriaVOGWT;
	}

	public static EtudiantSearchCriteriaVO etudiantSearchCriteriaVOGWTToEtudiantSearchCriteriaVO(
			EtudiantSearchCriteriaVOGWT pEtudiantSearchCriteriaVOGWT) {
		EtudiantSearchCriteriaVO lEtudiantSearchCriteriaVO = new EtudiantSearchCriteriaVO();

		if (pEtudiantSearchCriteriaVOGWT.getLogin() != null) {
			lEtudiantSearchCriteriaVO.setLogin(pEtudiantSearchCriteriaVOGWT
					.getLogin());
		}

		if (pEtudiantSearchCriteriaVOGWT.getPassword() != null) {
			lEtudiantSearchCriteriaVO.setPassword(pEtudiantSearchCriteriaVOGWT
					.getPassword());
		}

		if (pEtudiantSearchCriteriaVOGWT.getRole() != null) {
			lEtudiantSearchCriteriaVO.setRole(VOUtil
					.userRoleVOGWTToUserRole(pEtudiantSearchCriteriaVOGWT
							.getRole()));
		}

		if (pEtudiantSearchCriteriaVOGWT.getNom() != null) {
			lEtudiantSearchCriteriaVO.setNom(pEtudiantSearchCriteriaVOGWT
					.getNom());
		}

		if (pEtudiantSearchCriteriaVOGWT.getPrenom() != null) {
			lEtudiantSearchCriteriaVO.setPrenom(pEtudiantSearchCriteriaVOGWT
					.getPrenom());
		}

		if (pEtudiantSearchCriteriaVOGWT.getEmail() != null) {
			lEtudiantSearchCriteriaVO.setEmail(pEtudiantSearchCriteriaVOGWT
					.getEmail());
		}
		return lEtudiantSearchCriteriaVO;
	}

	public static UserVOGWT etudiantVOGWTToUserVOGWT(
			EtudiantVOGWT pEtudiantVOGWT) {
		UserVOGWT lUserVOGWT = new UserVOGWT();
		lUserVOGWT.setId(pEtudiantVOGWT.getId());
		lUserVOGWT.setLogin(pEtudiantVOGWT.getLogin());
		lUserVOGWT.setPassword(pEtudiantVOGWT.getPassword());
		lUserVOGWT.setRole(pEtudiantVOGWT.getRole());

		return lUserVOGWT;
	}

	public static ActualiteVOGWT createActualiteVOGWT(ActualiteVO pActualiteVO) {
		ActualiteVOGWT lActualiteVOGWT = new ActualiteVOGWT();
		lActualiteVOGWT.setId(pActualiteVO.getId());
		lActualiteVOGWT.setTitre(pActualiteVO.getTitre());
		lActualiteVOGWT.setContenu(pActualiteVO.getContenu());
		lActualiteVOGWT.setDate(pActualiteVO.getDate());
		lActualiteVOGWT.setUserVOGWT(VOUtil.userVOToUserVOGWT(pActualiteVO
				.getUserVO()));

		return lActualiteVOGWT;
	}

	public static ActualiteVO createActualiteVO(ActualiteVOGWT pActualiteVOGWT) {
		ActualiteVO lActualiteVO = new ActualiteVO();
		lActualiteVO.setId(pActualiteVOGWT.getId());
		lActualiteVO.setTitre(pActualiteVOGWT.getTitre());
		lActualiteVO.setContenu(pActualiteVOGWT.getContenu());
		lActualiteVO.setDate(pActualiteVOGWT.getDate());
		lActualiteVO.setUserVO(VOUtil.userVOGWTToUserVO(pActualiteVOGWT
				.getUserVOGWT()));

		return lActualiteVO;
	}

	public static ActualiteSearchCriteriaVO createActualiteSearchCriteriaVO(
			ActualiteSearchCriteriaVOGWT pActualiteSearchCriteriaVOGWT) {
		ActualiteSearchCriteriaVO lActualiteSearchCriteriaVO = new ActualiteSearchCriteriaVO();

		if (pActualiteSearchCriteriaVOGWT.getTitre() != null) {
			lActualiteSearchCriteriaVO.setTitre(pActualiteSearchCriteriaVOGWT
					.getTitre());
		}

		if (pActualiteSearchCriteriaVOGWT.getContenu() != null) {
			lActualiteSearchCriteriaVO.setContenu(pActualiteSearchCriteriaVOGWT
					.getContenu());
		}

		if (pActualiteSearchCriteriaVOGWT.getDate() != null) {
			lActualiteSearchCriteriaVO.setDate(pActualiteSearchCriteriaVOGWT
					.getDate());
		}
		lActualiteSearchCriteriaVO.setMax(pActualiteSearchCriteriaVOGWT
				.getMax());

		return lActualiteSearchCriteriaVO;
	}
	
	public static ActualiteSearchCriteriaVOGWT createActualiteSearchCriteriaVOGWT(
			ActualiteSearchCriteriaVO pActualiteSearchCriteriaVO) {
		ActualiteSearchCriteriaVOGWT lActualiteSearchCriteriaVOGWT = new ActualiteSearchCriteriaVOGWT();

		if (pActualiteSearchCriteriaVO.getTitre() != null) {
			lActualiteSearchCriteriaVOGWT.setTitre(pActualiteSearchCriteriaVO
					.getTitre());
		}

		if (pActualiteSearchCriteriaVO.getContenu() != null) {
			lActualiteSearchCriteriaVOGWT.setContenu(pActualiteSearchCriteriaVO
					.getContenu());
		}

		if (pActualiteSearchCriteriaVO.getDate() != null) {
			lActualiteSearchCriteriaVOGWT.setDate(pActualiteSearchCriteriaVO
					.getDate());
		}
		lActualiteSearchCriteriaVOGWT.setMax(pActualiteSearchCriteriaVO
				.getMax());

		return lActualiteSearchCriteriaVOGWT;
	}
	
	public static BoiteAuxLettresVOGWT createBoiteAuxLettresVOGWT(BoiteAuxLettresVO pBoiteAuxLettresVO) {
		BoiteAuxLettresVOGWT lBoiteAuxLettresVOGWT = new BoiteAuxLettresVOGWT();
		if(pBoiteAuxLettresVO != null) {
			lBoiteAuxLettresVOGWT.setId(pBoiteAuxLettresVO.getId());
			lBoiteAuxLettresVOGWT.setProprietaire(userVOToUserVOGWT(pBoiteAuxLettresVO.getProprietaire()));
			Collection<MessageVO> lMessages = pBoiteAuxLettresVO.getMessages();
			Collection<MessageVOGWT> lMessageVOGWTs = null;
			if(lMessages != null) {
				lMessageVOGWTs = new ArrayList<MessageVOGWT>(lMessages.size());
				for(MessageVO lMessageVO : lMessages) {
					lMessageVOGWTs.add(createMessageVOGWT(lMessageVO));
				}
			}
			
			lBoiteAuxLettresVOGWT.setMessages(lMessageVOGWTs);	
		}
		return lBoiteAuxLettresVOGWT;
	}

	public static BoiteAuxLettresVO createBoiteAuxLettresVO(BoiteAuxLettresVOGWT pBoiteAuxLettresVOGWT) {
		BoiteAuxLettresVO lBoiteAuxLettresVO = new BoiteAuxLettresVO();
		lBoiteAuxLettresVO.setId(pBoiteAuxLettresVOGWT.getId());
		lBoiteAuxLettresVO.setProprietaire(userVOGWTToUserVO(pBoiteAuxLettresVOGWT.getProprietaire()));
		Collection<MessageVOGWT> lMessageVOGWTs = pBoiteAuxLettresVOGWT.getMessages();
		Collection<MessageVO> lMessages = null;
		if(lMessageVOGWTs != null) {
			lMessages = new HashSet<MessageVO>();
			for(MessageVOGWT lMessageVOGWT : lMessageVOGWTs) {
				lMessages.add(createMessageVO(lMessageVOGWT));
			}
		}
		lBoiteAuxLettresVO.setMessages(lMessages);

		return lBoiteAuxLettresVO;
	}
	
	public static MessageVOGWT createMessageVOGWT(MessageVO pMessageVO) {
		MessageVOGWT lMessageVOGWT = null;
		if(pMessageVO != null) {
			lMessageVOGWT = new MessageVOGWT();
			lMessageVOGWT.setId(pMessageVO.getId());
			lMessageVOGWT.setTitre(pMessageVO.getTitre());
			lMessageVOGWT.setContenu(pMessageVO.getContenu());
			lMessageVOGWT.setDate(pMessageVO.getDate());
			if(pMessageVO.getEtat() != null) {
				lMessageVOGWT.setEtat(createMessageEtatGWT(pMessageVO.getEtat()));
			}
			lMessageVOGWT.setExpediteur(userVOToUserVOGWT(pMessageVO.getExpediteur()));
			lMessageVOGWT.setParent(createMessageVOGWT(pMessageVO.getParent()));
		}
		return lMessageVOGWT;
	}

	public static MessageVO createMessageVO(MessageVOGWT pMessageVOGWT) {
		MessageVO lMessageVO = null;
		if(pMessageVOGWT != null) {
			lMessageVO = new MessageVO();
			lMessageVO.setId(pMessageVOGWT.getId());
			lMessageVO.setTitre(pMessageVOGWT.getTitre());
			lMessageVO.setContenu(pMessageVOGWT.getContenu());
			lMessageVO.setDate(pMessageVOGWT.getDate());
			if(pMessageVOGWT.getEtat() != null) {
				lMessageVO.setEtat(createMessageEtat(pMessageVOGWT.getEtat()));
			}
			lMessageVO.setExpediteur(userVOGWTToUserVO(pMessageVOGWT.getExpediteur()));
			lMessageVO.setParent(createMessageVO(pMessageVOGWT.getParent()));
		}
		return lMessageVO;
	}
	
	public static MessageEtatGWT createMessageEtatGWT(MessageEtat pMessageEtat) {
		MessageEtatGWT lMessageEtatGWT = MessageEtatGWT.getMessageEtatGWTs().get(pMessageEtat.getValue());
		return lMessageEtatGWT;
	}

	public static MessageEtat createMessageEtat(MessageEtatGWT pMessageEtatGWT) {
		MessageEtat lMessageEtat = MessageEtat.fromString(pMessageEtatGWT.getValue());
		return lMessageEtat;
	}
}
